<script>
    var arr = [1, 3, '吃饭', ['睡觉', '睡觉', '写代码'], ['苹果', '香蕉', ["潘子", "嘎子"], '菠萝']]
    //封装起来直接调用即可
    function flatt(arr) {
        var newArr = []
        //循环判断是否是数组，是数组的话递归这个数组，不是的话push到新数组中
        function fn(arr) {
            for (var i = 0; i < arr.length; i++) {
                if (Array.isArray(arr[i])) {
                    fn(arr[i])
                } else {
                    newArr.push(arr[i])
                }
            }
        }
        fn(arr)
        return newArr
    }

   console.log(flatt(arr));

</script>


<!-- 重点： 
1.  Array.isArray(),判断元素是否是一个数组，是的话返回true，不是的话返回false。
2. （8）此处的for循环中的变量必须通过关键字var 或let等声明，否则i成为全局变量，在后续的递归中会导致变量混乱，出现死递归现象

拓展：
1.  原生js中存在原装的数组扁平化方法：flat() 默认只扁平化二维数组
如果想要将多维数组全部扁平化 那么就需要传入infinity
console.log(arr.flat(Infinity));
封装到原型的方法
Array.prototype.flatt = flatt;
console.log(arr.flatt());

2.  为什么要扁平化? 就是为了降低处理数据的耗费的时间
事件复杂度:衡量一个算法耗费的时间,描述一个算法耗费的时间,一般用O(n) n表示执行的次数
计算时间复杂度的时候 ,一般计算耗时最长,执行次数最多的一个
衡量一个事件复杂度,看循环嵌套和递归的层数
比如 for里面套一个for 事件复杂度O(n^2) -->

